﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using log4net;

/// <summary>
/// Descripción breve de EtapaProcesoCRN
/// </summary>
namespace Iudicium.Procesos.CRN
{
    public class EtapaProcesoCRN
    {
        private static readonly ILog log = LogManager.GetLogger("LogFile");
        public EtapaProcesoCRN()
        {
            //
            // TODO: Agregar aquí la lógica del constructor
            //
        }

        public static int InsertEtapaProceso(EtapaProceso objEtapaProceso)
        {
            if (objEtapaProceso == null)
            {
                throw new ArgumentException("la EtapaProceso no puede ser nula.");
            }
            if (string.IsNullOrEmpty(objEtapaProceso.Descripcion))
            {
                throw new ArgumentException("La descripcion de la etapaproceso no puede ser nulo o vacio");
            }
            if (objEtapaProceso.TipoProcesoId <= 0)
            {
                throw new ArgumentException("el tipoProcesoid no puede ser menor o igual a cero");
            }
            bool? inserted = false;

            EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter adapter =
                new EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter();
            adapter.Insert(objEtapaProceso.Descripcion, objEtapaProceso.TipoProcesoId, ref inserted);

            if (inserted == null)
                return 0;

            return 1;
        }

        public static void UpdateEtapaProceso(EtapaProceso objEtapaProceso)
        {
            if (objEtapaProceso == null)
            {
                throw new ArgumentException("la EtapaProceso no puede ser nula.");
            }
            if (objEtapaProceso.EtapaProcesoId <= 0)
            {
                throw new ArgumentException("EtapaProcesoId no puede ser menor o igual que cero.");
            }
            if (string.IsNullOrEmpty(objEtapaProceso.Descripcion))
            {
                throw new ArgumentException("La descripcion de la EtapaProceso no puede ser nula o vacia");
            }
            if (objEtapaProceso.TipoProcesoId <= 0)
            {
                throw new ArgumentException("tipoprocesoId no puede ser menor o igual que cero.");
            }
            EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter adpater =
                   new EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter();

            adpater.Update(objEtapaProceso.EtapaProcesoId, objEtapaProceso.Descripcion, objEtapaProceso.TipoProcesoId);

        }

        public static void DeleteEtapaProceso(int EtapaProcesoId)
        {
            if (EtapaProcesoId <= 0)
            {
                throw new ArgumentException("EtapaProcesoId no puede ser menor o igual que cero.");
            }
            EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter adpater =
                  new EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter();

            adpater.Delete(EtapaProcesoId);

        }

        public static EtapaProceso GetEtapaProcesoById(int EtapaProcesoId, int TipoProcesoId)
        {
            if (EtapaProcesoId <= 0)
            {
                throw new ArgumentException("EtapaProcesoId no puede ser menor o igual que cero.");
            }

            EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter adpater =
                new EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter();

            EtapaProcesoDS.EtapaProcesoDataTable tabla =
                adpater.GetEtapaProcesoById(EtapaProcesoId, TipoProcesoId);

            if (tabla == null || tabla.Rows.Count == 0)
            {
                throw new Exception("No se pudo obtener la etapa " + EtapaProcesoId + " de la base de datos");
            }
            return ConstruirEtapaProceso(tabla[0], TipoProcesoId);
        }

        public static List<EtapaProceso> GetEtapaProcesoBySearch(string parametro, string tipoId)
        {
            int aux = Convert.ToInt32(tipoId);
            List<EtapaProceso> lista = new List<EtapaProceso>();

            EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter adpater =
                  new EtapaProcesoDSTableAdapters.EtapaProcesoTableAdapter();

            EtapaProcesoDS.EtapaProcesoDataTable tabla =
                adpater.GetEtapaProcesoBySearch(parametro, aux);

            if (tabla == null)
            {
                throw new Exception("No se pudo obtener resultados de la busqueda con el parametro " +
                    parametro +
                    " de la base de datos");
            }

            foreach (EtapaProcesoDS.EtapaProcesoRow row in tabla)
            {
                EtapaProceso obj = ConstruirEtapaProceso(row, aux);
                if (obj != null)
                    lista.Add(obj);
            }
            return lista;
        }

        public static EtapaProceso ConstruirEtapaProceso(EtapaProcesoDS.EtapaProcesoRow row, int tipoprocesoId)
        {
            if (row == null)
                return null;
            return new EtapaProceso(row.etapaProcesoId, row.descripcion, tipoprocesoId);

        }
   
    }
}
